No real need for dbo.DelimitedSplit8K here if you only expect maximum two parts (left and right). The following will work a bit faster (please note extended sample data):
IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
DROP TABLE #TempTable
CREATE TABLE #TempTable (
[ID] INT IDENTITY(1,1) NOT NULL,
[DString] NVARCHAR(255) NULL,
PRIMARY KEY (ID))
INSERT INTO #TempTable
SELECT '0111~Apple' UNION ALL
SELECT '02222~Banana' UNION ALL
SELECT '033333~Carrot' UNION ALL
SELECT '044444~Danish' UNION ALL
SELECT '0555555~Eclair' UNION ALL
SELECT '000 NO TILDA' UNION ALL
SELECT NULL
SELECT
ID
,DString
,LEFT(DString, tld.ix - 1) AS
,SUBSTRING(DString, tld.ix + 1, 8000) AS
FROM
#TempTable AS tt
CROSS APPLY (SELECT NULLIF(CHARINDEX('~',tt.DString),0)) tld(ix)